package poo.agendina_seriale;
import java.util.*;
import java.io.*;

public abstract class AgendinaAstratta implements Agendina{
	
	public abstract void aggiungi( Nominativo n );
	public abstract Iterator<Nominativo> iterator();

	public int size(){
		int conta=0;
		for( Nominativo n: this ) conta++;
		return conta;
	}//size
		
	public void svuota(){
		Iterator<Nominativo> it=this.iterator();
		while( it.hasNext() ) {
			it.next(); it.remove();
		}
	}//svuota
	
	public void rimuovi( Nominativo n ){
		Iterator<Nominativo> it=this.iterator();
		while( it.hasNext() ) {
			Nominativo x=it.next();
			if( x.equals(n) ){ it.remove(); break; }
			if( x.compareTo(n)>0 ) break;
		}
	}//rimuovi

	public Nominativo cerca( Nominativo n ){
		for( Nominativo x: this ){
			if( x.equals(n) ) return x;
			if( x.compareTo(n)>0 ) break;
		}		
		return null;
	}//cerca

	public Nominativo cerca( String prefisso, String telefono ){
		for( Nominativo x: this )
			if( x.getPrefisso().equals(prefisso) &&
				x.getTelefono().equals(telefono) ) return x;
		return null;
	}//cerca

	public void salva(String nomeFile) throws IOException{
		ObjectOutputStream oos=
			new ObjectOutputStream(new FileOutputStream(nomeFile));
		for( Nominativo n: this ) 
			oos.writeObject(n);
		oos.close();
	}//salva
	
	public void ripristina(String nomeFile)throws IOException{
		ObjectInputStream ois=
			new ObjectInputStream(new FileInputStream(nomeFile));
		Nominativo n=null;
		this.svuota();
		for(;;){
			try{
				n=(Nominativo)ois.readObject();
			}catch(ClassNotFoundException e){
				throw new IOException();
			}catch(ClassCastException cce){
				throw new IOException();				
			}catch(EOFException eof){
				break;
			}
			this.aggiungi(n);
		}//for
		ois.close();
	}//ripristina
	
	public String toString(){
		StringBuilder sb=new StringBuilder(1000);
		for( Nominativo x: this ){
			sb.append( x );
			sb.append('\n');
		}
		return sb.toString();
	}//toString
	
}//AgendinaAstratta
